#define _CRT_SECURE_NO_WARNINGS
//#include "Stack.h"
//void test() {
//	ST sl;
//	STInit(&sl);
//	StackPush(&sl, 1);
//	StackPush(&sl, 2);
//	StackPush(&sl, 3);
//	printf("%d\n", STSize(&sl));
//	while (!(StackEmpty(&sl))) {
//		int ans = StackTop(&sl);
//		printf("%d\n", ans);
//		StackPop(&sl);
//	}
//	printf("%d\n", STSize(&sl));
//	STDestroy(&sl);
//
//}
//int main() {
//	test();
//
//	return 0;
//}
#include <stdio.h>
int check(int rope[], int n, int need, int mid) {
	int i = 0;
	int have = 0;
	for (i = 0; i < n; i++)have += rope[i] / mid;
	if (have > need) return 1;
	return 0;
}
int main() {
	int N = 0;
	scanf("%d", &N);
	int i = 0;
	int max = 0;
	int rope[1000];
	for (i = 0; i < N; i++) {
		scanf("%d", &rope[i]);
		if (rope[i] > max)max = rope[i];
	}
	int left = 1;
	int right = max;
	int need = 0;
	scanf("%d", &need);
	int have = 0;
	int cut = 0;
	int mid = 0;
	while (left < right) {
		mid = (left + right) / 2;
		have = 0;
		if (check(rope, N, need, mid) && (!check(rope, N, need, mid + 1))) {
			printf("%d\n", mid);
			return 0;
		}
		if (!check(rope, N, need, mid)) {
			right = mid - 1;
		}
		if (check(rope, N, need, mid + 1)) {
			left = mid + 1;
		}
	}
	printf("0\n");
	return 0;
}